package com.字符流;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

/*字节流读取文本文件测试*/
public class FileInputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*测试1：字节流对汉字的处理*/
        FileInputStream fis = new FileInputStream("idea_test\\chinese.txt");
        //一个一个字节读
//        int by;
//        while((by=fis.read())!=-1){
//            System.out.print((char)by);
//        }

        /*结果为:
        123456789
        ä¸­å½ä½ å¥½
        123456789

         * ä¸­ å½ ä½  å¥½分别对应中 国 你 好，3字节1汉字*/

        //字节数组读
        int len;
        byte[] bys0 = new byte[1024];
        while((len=fis.read(bys0))!=-1){
            System.out.print(new String(bys0,0,len));
        }

        /*结果为：
        * 123456789
          中国你好
          123456789
          * */

        //释放资源
        fis.close();




        /*测试2：汉字编码和对应字节*/
        String s = "你好";
        byte[] bys = s.getBytes();
        byte[] bys1 = s.getBytes("UTF-8");
        byte[] bys2 = s.getBytes("GBK");

        //Arrays:包含操作数组的各种方法。
        //Arrays.toString()返回指定数组的内容的字符串表示形式。
        System.out.println(Arrays.toString(bys)); //[-28, -67, -96, -27, -91, -67]
        System.out.println(Arrays.toString(bys1)); //[-28, -67, -96, -27, -91, -67]
        System.out.println(Arrays.toString(bys2)); //[-60, -29, -70, -61]

        /*结论：
        0.使用字符数组读，中文没有乱码
        * 1.bys,bys1输出内容相同，说明在不指定编码格式时，输出汉字默认使用UTF-8编码。
        * 2.由结果可证明
        *   UTF-8编码：3字节/汉字
        *   GBK编码：2字节/汉字
        * 3.两种编码下，汉字字节总是以负数开头*/
    }
}
